package pe.edu.pucp.notasmoviles.service.impl;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.pucp.notasmoviles.domain.Usuario;
import pe.edu.pucp.notasmoviles.persistence.UsuarioDao;
import pe.edu.pucp.notasmoviles.service.UsuarioService;
import pe.edu.pucp.notasmoviles.service.exception.LoginException;

// Igual que @Component pero especializado para la capa @Service
@Service
@Transactional
public class UsuarioServiceImpl implements UsuarioService {
	private Logger logger = Logger.getLogger(UsuarioServiceImpl.class);

	// Inyectamos la implementacion del Dao
	@Autowired
	private UsuarioDao usuarioDao;

	// El @Transaccional a nivel de metodo sobreescribe la configuracion a nivel
	// de clase
	public Usuario login(String username, String password) {
		logger.debug("Inicio");
		Usuario usuario = usuarioDao.getUsuarioPorUsername(username);
		if (usuario == null) {
			throw new LoginException("El usuario no existe");
		} else if (!usuario.getPassword().equals(password)) {
			throw new LoginException("El usuario y password no son validos");
		} else {
			return usuario;
		}
	}

	@PreAuthorize("#usuario.username != authentication.name")
	public void registrar(Usuario usuario) {
		usuarioDao.insertar(usuario);
	}

	public List<Usuario> getUsuarios() {
		return usuarioDao.getUsuarios();
	}

	public void eliminar(String username) {
		usuarioDao.eliminar(usuarioDao.getUsuarioPorUsername(username));
	}
}
